<?php

namespace App\Think\SdkPayment;

/**
 * 大象支付 SDK
 */
class Daxiang{

// 账号ID：10463
// 手机号：17798351609
// 密码：qwe123456
// 后台域名：http://dxzhifu.com/client/index.html#/dashboard
// 账号ID：10463
// 手机号：17798351609
// 密码：qwe123456
// 通道:支付宝，微信
// 回调ip：39.108.255.43
// 编号:alipay_auto,wechat_auto
// 支付网关:http://dxzhifu.net/api/Gateway/create
// 对接文档:http://www.dxzhifu.com/doc.html
// 请商户尽快登录后台修改登录密码和安全码(提现密码)，并绑定谷歌令牌以确保账户安全！

	

	public function pay_url($args){
		log_to($args, "paySDKpay-payurl-".__CLASS__);
		//下面参数均为商户自定义，可自行修改
		//请求获取的网页类型，json 返回json数据，text直接跳转html界面支付，如没有特殊需要，建议默认text即可
		$content_type = 'json';
		$account_id = '10463';
		$s_key = '4ECB3D9EE60AFD7F8AF875DFC61E947C';
		$api_url = 'http://dxzhifu.com/api/Gateway/create';
		$out_trade_no = isset($args['out_trade_no']) ? $args['out_trade_no'] : date("YmdHis").mt_rand(10000,99999);
		//初始化支付通道，目前通道：wechat_auto（微信）、alipay_auto（支付宝）、alipay_qrcode（支付宝转账）
		$thoroughfare = $args['paytype'].'_auto';
		$amount = isset($args['amount']) ? $args['amount'] : 100;
		$amount = floatval($amount);
		//轮训状态，是否开启轮训，状态 1 为关闭   2为开启
		$robin = 1;
		//异步通知接口url->用作于接收成功支付后回调请求
		$callback_url = isset($args['callback_url']) ? $args['callback_url'] : '';
		//支付成功后自动跳转url
		$success_url  = isset($args['success_url']) ? $args['success_url'] : '';
		//支付失败或者超时后跳转url
		$error_url    = isset($args['error_url']) ? $args['error_url'] : '';

		//生成签名
		$sign = $this->sign2($s_key, ['amount'=>$amount, 'out_trade_no'=>$out_trade_no, 'account_id'=>$account_id, 'callback_url'=>$callback_url]);
		
		//支付类型->类型参数是服务版使用，公开版无需传参也可以
		$post_data['account_id']   = $account_id;
		$post_data['content_type'] = $content_type;
		$post_data['thoroughfare'] = $thoroughfare;
		$post_data['out_trade_no'] = $out_trade_no;
		$post_data['robin']        = $robin;
		$post_data['callback_url'] = $callback_url;
		$post_data['success_url']  = $success_url;
		$post_data['error_url']    = $error_url;
		$post_data['amount']       = $amount;
		// $post_data['sign']         = $sign;
		// $sign = $this->sign($s_key, $post_data);
		$post_data['sign2']       = $sign;
		$post_data['ext']         = '';
		$post_data['terminalip']  = '';

		$ret  = json_decode($this->request_post($api_url, $post_data),true);
		log_to($args, "paySDKpay-".__CLASS__);
		if($ret['code'] == 200){
			$rs['code'] = 1;
			$rs['out_trade_no'] = $out_trade_no;
			$rs['pay_url']      = $ret['data']['jump_url'];
		}else{
			$rs['code'] = $ret['code'];
			$rs['msg']  = $ret['msg'];
		}
		return $rs;	
	}


	public function response(){
		log_to($_POST, "paySDKpay-response-".__CLASS__);
		$res = $_POST;
		$rs  = [];
		$rs['status']     = ($res['status'] == 'success') ? 1 : 2;
		$rs['order_sn']   = $res['out_trade_no'];
		$rs['money_real'] = $res['amount_true'];
		return $rs;
	}



	private function request_post($url = '', $post_data = array()){
        if (empty($url) || empty($post_data)) {
            return false;
        }
        $o = "";
        foreach ( $post_data as $k => $v ) 
        { 
            $o.= "$k=" . urlencode( $v ). "&" ;
        }
        $post_data = substr($o,0,-1);
        $postUrl = $url;
        $curlPost = $post_data;
        $ch = curl_init();//初始化curl
        curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        $data = curl_exec($ch);//运行curl
        curl_close($ch);
        return $data;
    }

	public static function sign2($key_id, $array){
		$data = md5(sprintf("%.2f", $array['amount']) .';'. $array['out_trade_no'].';'. $array['account_id'].';'. $array['callback_url']);
		return strtolower(md5(strtolower($key_id) .';'. strtolower($data)));
	}
    

}